package marina;

import java.util.Scanner;

public class J14Ex46CalendarV2 {
	public static void main(String[] args) {
		// 서기 1년 1월 1일은 [월]요일임.
		// 1년은 일반적으로 365일임.(평년)
		// => 31,[28],31,30,31,30,31,31,30,31,30,31
		// 하지만, 1년이 366일인 경우도 있음.(윤년)
		// => 31,[29],31,30,31,30,31,31,30,31,30,31

		// 윤년 : 4로 나누어지되, 100으로 나누어 떨어지지 않거나
		// 400으로 나누어 떨어지는 년도.
		// 0: 일 , 1: 월, 2: 화,...6: 토
		Scanner sc = new Scanner(System.in);
		System.out.println("마지막 날의 요일을 알고 싶은 년도를 입력하세요.");
		int myday;
		int cyear = sc.nextInt();
		int allday = 365;
		int leapyear = 0;
		char day = ' ';
		// 윤년 횟수 계산
		for (int i = 1; i <= cyear; i++) {
			if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
				++leapyear;
			}
		}
		// 총 일수 계산한 후 7로 나눈 나머지 계산
		myday = ((cyear * allday) + leapyear) % 7;

		switch (myday) {
		case 0:
			day = '일';
			break;
		case 1:
			day = '월';
			break;
		case 2:
			day = '화';
			break;
		case 3:
			day = '수';
			break;
		case 4:
			day = '목';
			break;
		case 5:
			day = '금';
			break;
		case 6:
			day = '토';
			break;
		}

		sc.close();

		System.out.println("서기 " + cyear + "년 12월 31일의 요일은 " + day + "요일 입니다.");

		// 달력 출력
		String result = "\n\t\t\t" + (cyear + 1);
		result += "년 1월\n";
		result += "\t--------------------------------------------------\n";
		result += "\t일\t월\t화\t수\t목\t금\t토\n";
		// 줄 바꿈 처리를 위한 변수
		int linecount = 0;
		// 공백 처리
		if (myday > 0) {
			for (int j = 0; j <= myday; ++j) {
				result += "\t";
				++linecount;
			}
		}
		// 날짜 출력
		for (int k = 1; k <= 31; ++k) {
			result += "\t" + k;
			++linecount;
			if (linecount % 7 == 0) {
				result += "\n";
			}
		}
		System.out.println(result);
	}
}
